SpringBoot的三级缓存

Info

SpringBoot 依靠三级缓存方案解决循环依赖的问题,这三级缓存在 Spring 中表现为三个 Map 对象。这三个 Map 对象定义在 DefaultSingletonBeanRegistry 类中,该类是 DefaultListableBeanFactory 的父类。

DefaultSingletonBeanRegistry 中的三级缓存 Map 定义代码

Spring Boot进阶:原理、实战与面试题分析#^3300019666-15-797-823

三级缓存分别是:

三级缓存分别为 singletonObjects、earlySingletonObjects、singletonFactories。

一级缓存 singletonObjects

一级缓存用来持有完整的 Bean 实例。

二级缓存 earlySingletonObjects

在二级缓存中存放的是那些提前暴露的对象(已经创建但是还没有完成属性注入的对象)

三级缓存 singletonFactories

第三级缓存 singletonFactories 是用来存放 二级缓存earlySingletonObjects 的工厂对象

$

Bean 实例化过程中的 addSingletonFactory()方法代码


author: Ten
aliases:

  • Bean 实例化过程中的 addSingletonFactory()方法代码
    dg-publish: true
    folder-index: false
    created: 2023-04-20 12:10
    date updated: 2023-04-20 12:11

Bean 实例化过程中的 addSingletonFactory()方法代码

//1. 初始化Bean,通过构造函数创建Bean 
instanceWrapper = createBeanInstance(beanName, mbd, args); 
//针对循环依赖问题暴露单例工厂类 
addSingletonFactory(beanName, () -> getEarlyBeanReference(beanName, mbd, bean)); 
//2. 初始化Bean实例,完成Bean实例的完整创建 
populateBean(beanName, mbd, instanceWrapper);

Spring Boot进阶:原理、实战与面试题分析#^3300019666-15-1520-1689